home *** CD-ROM | disk | FTP | other *** search
/ Mac100% 1998 November / MAC100-1998-11.ISO.7z / MAC100-1998-11.ISO / オンラインソフト定点観測 / ユーティリティ / Mops 3.2.sea / Mops 3.2 / Mops source / Module source / zExtrasmod.txt < prev    next >
Text File  |  1998-06-13  |  6KB  |  265 lines

  1. ¥ This module implements a number of words that we need only at compile time,
  2. ¥ or only in the Mops development environment.
  3.  
  4.  
  5.  
  6. false    value    LOG_THERE?
  7. false    value    SRC_THERE?
  8. false    value    USE_MOD?
  9.  
  10. false    value    QE?            ¥ set true if we know QE is running
  11.  
  12.  
  13.  
  14. :class  FSSpec  super{ object }
  15. 68k_record
  16. {    int        vRefNum
  17.     var        parID
  18. 64    bytes    filename
  19. }
  20.  
  21. :m getVref:        get: vRefNum    ;m
  22. :m getDirID:    get: parID        ;m
  23.  
  24. :m setVref:        put: vRefNum    ;m
  25. :m setDirID:    put: parID        ;m
  26. :m name:        64 min  addr: fileName  >str255  drop  ;m
  27. :m getName:        addr: fileName  count  ;m
  28.  
  29.  
  30. :m NEW:
  31.     get: vRefNum  get: parID  addr: filename  ^base
  32.     FSMakeFSSpec  ;m
  33.  
  34. ;class
  35.  
  36.  
  37. FSSpec  FS
  38.  
  39. objPtr    THEMOD  class_is module
  40.  
  41. window    DW
  42.  
  43. file    SRC
  44. file    QEF
  45.  
  46.  
  47. 0    value    MK_CFA
  48. 0    value    TOPDIR
  49. 0    value    TOPDATE
  50.  
  51.  
  52. : CHK_DATE
  53.     getFileInfo: src  OK?  src 76 + @
  54.     use_mod?
  55.     IF
  56.         base: theMod  @
  57.     ELSE
  58.         mk_cfa 14 + @  ?dup NIF -1 THEN
  59.     THEN
  60.     u>
  61.     IF
  62.         3 beep  cr  msg# 76    ¥ "Source later than compiled version"
  63.     THEN  ;
  64.  
  65.  
  66. ¥ ?OPEN_IN_QE is exported.  It sees if the passed-in file can be opened
  67. ¥ in Quick Edit via an AppleEvent.  The value QE? is left indicating
  68. ¥ the result.  It's not a serious problem if we can't find the file, but
  69. ¥ it's nice if we can.
  70.  
  71. : ?OPEN_IN_QE  { ^file -- }
  72.     false -> QE?                    ¥ in case another error comes up!
  73.     getname: [ ^file ]  name: FS
  74.     0 setVref: FS  0 setDirID: FS
  75.     new: FS
  76.     IF        ¥ An error occured.  The file might have been opened via
  77.             ¥  standard file.  In this case, topDir will be set.  Let's
  78.             ¥  try...
  79.         getName: [ ^file ]
  80.         name: FS
  81.         0 setVref: FS  topDir setDirID: FS
  82.         new: fs   ?EXIT            ¥ Out if we still can't find it
  83.     THEN
  84.     
  85.     getName: FS  name: qef
  86.     getVref: FS  setVref: qef
  87.     getDirID: FS  setDirID: qef
  88.     qef 0 0   openFile: tQE     ?EXIT
  89.                         ¥ If AE send failed, maybe QE isn't there at all!
  90.     true -> QE?  ;
  91.         
  92.  
  93. : (OPEN_SRC)
  94.     2dup  put: $tmp  name: src
  95.     openReadOnly: src          ¥ Get full pathname.
  96.     ?error 66                ¥ "couldn't find source file"
  97.     src ?open_in_QE
  98.     close: src  drop
  99.     QE? not  ?error 67        ¥ "Quick Edit not open or sys7 not running"
  100.  
  101. ¥    use_mod?
  102. ¥    NIF
  103. ¥        mk_cfa 10 + @  setDirID: src
  104. ¥    THEN
  105. ¥    src ?open_in_QE
  106. ;
  107.  
  108. : SRC_NAME
  109.     mk_cfa 18 + count  ;
  110.  
  111. : OPEN_SRC
  112.     src_name  (open_src)  ;
  113.  
  114. : OPEN_SRC_IN_MOD
  115.     txtName: theMod  (open_src)  ;
  116.  
  117.  
  118. ¥ The following words are used in conjunction with Quick Edit.
  119.  
  120. ¥ EDIT is exported.  It opens the given file in QE if possible.
  121. ¥ Usage:  edit xxxx
  122.  
  123. : EDIT
  124.     setName: src
  125.     openReadOnly: src          ¥ Get full pathname.
  126.     ?error 66                ¥ "couldn't find source file"
  127.     src ?open_in_QE
  128.     close: src  drop
  129.     QE? not  ?error 67        ¥ "Quick Edit not open or sys7 not running"
  130. ;
  131.  
  132. ¥ OPENSOURCE is exported.  This word is called from QE, so we can assume
  133. ¥ QE is there.  QE is asking us to identify the source file for the given
  134. ¥ word, and then call QE back to open that file.  The format of the string
  135. ¥ sent from QE (located in QEstr) is  FindSource xxxxx.  At this point
  136. ¥ we're EVALUATEing, and have parsed the FindSource, so we can now
  137. ¥ simply call DEFINED?.
  138. ¥ Note: this word is also called LOCATE, which I now think is a better name.
  139.  
  140. : OPENSOURCE
  141.     defined?
  142.     IF    locate_src
  143.     ELSE
  144.         1 beep
  145.         reset: QEstr
  146.         7 skip: QEstr      ¥ skip over "locate ", and hope "opensource" wasn't
  147.                         ¥  what was called!
  148.         get: QEstr type space  ." not defined!!"
  149.     THEN  ;
  150.  
  151.  
  152. ¥ def?? is exported.  It's needed by the QE special menu item def??
  153.  
  154. : def?? ¥ 19Dec93 DBH slightly changed to show us the word in question and
  155.         ¥  display the answer
  156.     reset: QEstr
  157.     6 skip: QEstr  ¥ skip over def?? 
  158.     get: QEstr type space
  159.     defined?
  160.     nip
  161.     IF        ." defined"
  162.     ELSE    ." not defined!!"
  163.     THEN ;
  164.  
  165.  
  166. : MOVE_CURS  { pos -- }
  167.     QE?  0EXIT
  168.     qef  pos  dup  openFile: tQE  0EXIT
  169.     false -> QE?            ¥ failed - assume QE has gone away
  170. ;
  171.  
  172. ¥        ========== end of QE-related words =============
  173.  
  174.  
  175. : (FINDMK)        ¥ ( cfa 0 -- )
  176.     drop  dup -> mk_cfa  2- w@  $ BC41 =    ¥ is it a marker?
  177.     IF                                        ¥ yes
  178.         mk_cfa w@ 1 =                        ¥ is it a file marker?
  179.         -> endTrav?
  180.     THEN
  181. ;
  182.     
  183. : FIND_MARK?    ¥ ( start-addr -- )
  184.     ['] (findmk)  0  rot  trav-from
  185.     endTrav?  ;
  186.  
  187.  
  188. : LOCATE_SRC  { theCfa -- }        ¥ Exported.  Opens source window for given
  189.                                 ¥ definition, if possible.
  190.     use_mod?
  191.     NIF    theCfa find_mark?   0EXIT
  192.     THEN
  193.  
  194.     use_mod?
  195.     IF    open_src_in_mod
  196.         false -> use_mod?    ¥ For next time
  197.     ELSE
  198.         open_src
  199.     THEN
  200.     QE? IF  theCfa >name n>count  find: tQE  drop  THEN  ;
  201.  
  202.  
  203. : USE_MODULE    ¥ ( ^mod -- )
  204.     -> theMod  true -> use_mod?  ;
  205.  
  206.  
  207.  
  208. ¥            ======== Code for loading and reloading =========
  209.  
  210. (* ***
  211.  
  212. ¥ SAVE-LOAD is a smarter variant of mark_file which we use
  213. ¥  to put a file mark in the dic at the start of each load.
  214. ¥ It includes the dirID, whether logged, and the date/time
  215. ¥  loaded.
  216.  
  217. : SAVE-LOAD
  218.     getName: topFile  put: $tmp  bl +: $tmp  reset: $tmp
  219.     & :  <chsearch: $tmp  negate skip: $tmp
  220.     get: $tmp
  221.     
  222.     sHdr
  223.     file-mark codeW,            ¥ file-mark is the "handler code"
  224.     topDir code,
  225.     topDate code,
  226.     release: $tmp  ;
  227.  
  228.  
  229. : LOADIT  { ¥ svCurs -- }
  230. ¥    purge_init_actions
  231.     curs -> svCurs -curs
  232.     getFileInfo: topFile  NIF  topFile 76 + @  ELSE  0  THEN  -> topDate
  233.     clear: topFile
  234.     topDir  setDirID: topFile
  235.     save-load
  236.     MBcomp LdFromMod  drop: loadFile
  237.     svCurs -> curs
  238. ;
  239. ***  *)
  240.  
  241.  
  242. : L         ¥ Load
  243.     pushNew: loadfile
  244.     'type TEXT 1 stdget: topfile
  245.     IF    getDirID  dup  setDirID: topFile  -> topDir
  246.         (load)
  247.     ELSE
  248.         clear: loadfile
  249.     THEN  ;  
  250.  
  251. : FM        ¥ Forget to mark
  252.     CDP find_mark?  not abort" No mark!"
  253.     mk_cfa ex-gen
  254. ;
  255.  
  256. : RL
  257.     CDP find_mark?  not abort" Nothing loaded!"
  258.     pushnew: loadfile
  259.     src_name  name: topFile        ¥ using full path name
  260.                                 ¥  stored after the marker
  261.     mk_cfa ex-gen                ¥ forget back to the marker
  262.     (load)
  263. ;
  264.  
  265.